import 'package:flutter/services.dart';
import 'package:get/get.dart';
import 'package:get_storage/get_storage.dart';
import 'package:flutter_easyloading/flutter_easyloading.dart';
import 'package:flutter/material.dart';
import 'common/data/services/data_reset_service.dart';
import 'common/data/services/user_service.dart';
import 'common/data/services/init_data_service.dart';
import 'common/data/services/database_service.dart';
import 'common/utils/colors.dart';
import 'common/utils/storage_utils.dart';

/// 全局初始化类
class Global {
  /// 存储键：应用是否已经初始化过数据
  static const String _isAppInitialized = 'is_app_initialized';

  /// 初始化全局配置
  static Future<void> init() async {
    // 确保Flutter框架初始化完成
    WidgetsFlutterBinding.ensureInitialized();

    // 初始化Storage工具类
    await StorageUtils.init();

    // 强制竖屏
    await SystemChrome.setPreferredOrientations([
      DeviceOrientation.portraitUp,
      DeviceOrientation.portraitDown,
    ]);

    // 初始化服务
    await initServices();
  }

  static Future<void> initServices() async {
    // 初始化数据库服务
    await Get.putAsync(() async => DatabaseService());

    // 初始化数据重置服务
    await Get.putAsync(() async => DataResetService());

    // 初始化用户服务
    await Get.putAsync(() async => UserService().init());

    // 初始化数据服务
    await Get.putAsync(() async => InitDataService());

    // 检查应用是否是首次运行
    bool isFirstRun = StorageUtils.getBool(_isAppInitialized) != true;

    // 只在首次运行时初始化数据
    if (isFirstRun) {
      debugPrint('应用首次运行，执行数据初始化...');
      await initAllData();
      // 标记应用已初始化
      await StorageUtils.setBool(_isAppInitialized, true);
    } else {
      debugPrint('应用已初始化过数据，跳过初始化步骤');
    }

    // 注意：下面这行是针对开发环境的，正式环境中应该注释掉
    // 需要重置数据时，可以取消注释这行
    // await clearAllData();
  }

  /// 清除所有数据（仅在开发环境使用）
  static Future<void> clearAllData() async {
    debugPrint('开始清除所有数据...');
    // 先清除所有数据
    final dataResetService = Get.find<DataResetService>();
    await dataResetService.resetAllData();

    // 等待数据库连接完全关闭和重新初始化
    await Future.delayed(const Duration(milliseconds: 300));

    // 重置初始化标志，以便下次启动时重新初始化
    await StorageUtils.setBool(_isAppInitialized, false);

    debugPrint('所有数据已清除，下次启动将重新初始化');
  }

  /// 初始化所有数据（仅在首次运行应用时调用）
  static Future<void> initAllData() async {
    debugPrint('开始初始化所有应用数据...');
    // 初始化所有数据
    final initDataService = Get.find<InitDataService>();
    await initDataService.resetAndInitData();

    // 重新检查登录状态
    final userService = Get.find<UserService>();
    await userService.checkLoginStatus();

    debugPrint('所有数据初始化完成');
  }

  /// 配置加载指示器
  static void configLoading() {
    EasyLoading.instance
      ..displayDuration = const Duration(milliseconds: 2000)
      ..indicatorType = EasyLoadingIndicatorType.ring
      ..loadingStyle = EasyLoadingStyle.custom
      ..indicatorSize = 45.0
      ..radius = 12.0
      ..progressColor = AppColors.secondary
      ..backgroundColor = AppColors.primary.withOpacity(0.9)
      ..indicatorColor = AppColors.secondary
      ..textColor = AppColors.text
      ..maskColor = AppColors.primary.withOpacity(0.6)
      ..userInteractions = false
      ..dismissOnTap = true
      ..boxShadow = [
        BoxShadow(
          color: Colors.black.withOpacity(0.2),
          offset: const Offset(0, 2),
          blurRadius: 8.0,
        ),
      ];
  }
}
